home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / var / lib / python-support / python2.6 / glchess / gtkui / network.pyc (.txt) < prev   
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  23.8 KB  |  645 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import gettext
  5. import gobject
  6. import gtk
  7. import pango
  8. import gtkui
  9. import glchess.ui as glchess
  10. _ = gettext.gettext
  11.  
  12. class GtkNetworkAddDialog:
  13.     
  14.     def __init__(self, networkDialog, parent):
  15.         self._GtkNetworkAddDialog__networkDialog = networkDialog
  16.         self._GtkNetworkAddDialog__gui = gtkui.loadGladeFile('network_game.glade', 'add_account_dialog')
  17.         self._GtkNetworkAddDialog__gui.signal_autoconnect(self)
  18.         self._GtkNetworkAddDialog__gui.get_widget('add_account_dialog').set_transient_for(parent)
  19.         self.serverModel = gtk.ListStore(str, str, int)
  20.         self.serverModel.set(self.serverModel.append(), 0, _('GGZ Gaming Zone'), 1, 'gnome.ggzgamingzone.org', 2, 5688)
  21.         self.serverModel.set(self.serverModel.append(), 0, _('Custom'), 1, '', 2, 5688)
  22.         widget = self._GtkNetworkAddDialog__gui.get_widget('server_combo')
  23.         widget.set_model(self.serverModel)
  24.         cell = gtk.CellRendererText()
  25.         widget.pack_start(cell, False)
  26.         widget.add_attribute(cell, 'text', 0)
  27.         widget.set_model(self.serverModel)
  28.         widget.set_active(0)
  29.  
  30.     
  31.     def setVisible(self, isVisible):
  32.         widget = self._GtkNetworkAddDialog__gui.get_widget('add_account_dialog')
  33.         if isVisible:
  34.             widget.present()
  35.         else:
  36.             widget.hide()
  37.             self.clear()
  38.  
  39.     
  40.     def clear(self):
  41.         self._GtkNetworkAddDialog__gui.get_widget('server_combo').set_active(0)
  42.         self._GtkNetworkAddDialog__gui.get_widget('username_entry').set_text('')
  43.  
  44.     
  45.     def _on_server_changed(self, widget):
  46.         widget = self._GtkNetworkAddDialog__gui.get_widget('server_combo')
  47.         model = widget.get_model()
  48.         iter = widget.get_active_iter()
  49.         (host,) = model.get(iter, 1)
  50.         (port,) = model.get(iter, 2)
  51.         self._GtkNetworkAddDialog__gui.get_widget('host_entry').set_text(host)
  52.         self._GtkNetworkAddDialog__gui.get_widget('port_spin').set_value(port)
  53.         table = self._GtkNetworkAddDialog__gui.get_widget('custom_server_table')
  54.         if host == '':
  55.             table.show()
  56.         else:
  57.             table.hide()
  58.  
  59.     
  60.     def have_data(self):
  61.         username = self._GtkNetworkAddDialog__gui.get_widget('username_entry').get_text()
  62.         host = self._GtkNetworkAddDialog__gui.get_widget('host_entry').get_text()
  63.         if username != '':
  64.             pass
  65.         return host != ''
  66.  
  67.     
  68.     def _on_input_changed(self, widget):
  69.         self._GtkNetworkAddDialog__gui.get_widget('add_button').set_sensitive(self.have_data())
  70.  
  71.     
  72.     def _on_username_activate(self, widget):
  73.         if self.have_data():
  74.             self._on_response(None, gtk.RESPONSE_OK)
  75.         
  76.  
  77.     
  78.     def _on_response(self, widget, response_id):
  79.         username = self._GtkNetworkAddDialog__gui.get_widget('username_entry').get_text()
  80.         host = self._GtkNetworkAddDialog__gui.get_widget('host_entry').get_text()
  81.         port = self._GtkNetworkAddDialog__gui.get_widget('port_spin').get_value_as_int()
  82.         name = '%s@%s' % (username, host)
  83.         if response_id == gtk.RESPONSE_OK:
  84.             profile = self._GtkNetworkAddDialog__networkDialog.feedback.addProfile((name, username, host, port))
  85.             self._GtkNetworkAddDialog__networkDialog.addProfile(profile, profile.name, useNow = True)
  86.         
  87.         self._GtkNetworkAddDialog__gui.get_widget('add_account_dialog').hide()
  88.         self.clear()
  89.  
  90.     
  91.     def _on_delete(self, widget, event):
  92.         return True
  93.  
  94.  
  95.  
  96. class GtkNetworkGameDialog(glchess.ui.NetworkController):
  97.     '''
  98.     '''
  99.     
  100.     def __init__(self, mainUI, feedback):
  101.         """Constructor for a new game dialog.
  102.         
  103.         'mainUI' is the main UI.
  104.         'feedback' is the object to feedback events with.
  105.         """
  106.         self._GtkNetworkGameDialog__mainUI = mainUI
  107.         self.feedback = feedback
  108.         self._GtkNetworkGameDialog__gui = gtkui.loadGladeFile('network_game.glade', 'network_game_dialog')
  109.         self._GtkNetworkGameDialog__gui.signal_autoconnect(self)
  110.         self._GtkNetworkGameDialog__profile = None
  111.         self.profileModel = gtk.ListStore(gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, str)
  112.         self.profileModel.set(self.profileModel.append(), 0, None, 1, self._set_profile, 2, _('Disconnected'))
  113.         self.profileModelSuffixCount = 0
  114.         self.profileModel.set(self.profileModel.append(), 1, None)
  115.         self.profileModelSuffixCount += 1
  116.         self.profileModel.set(self.profileModel.append(), 0, None, 1, self._new_profile, 2, _('New profile...'))
  117.         self.profileModelSuffixCount += 1
  118.         widget = self._GtkNetworkGameDialog__gui.get_widget('server_combo')
  119.         widget.set_model(self.profileModel)
  120.         widget.set_active(0)
  121.         widget.set_row_separator_func(self._is_profile_model_separator)
  122.         cell = gtk.CellRendererText()
  123.         widget.pack_start(cell, False)
  124.         widget.add_attribute(cell, 'text', 2)
  125.         self.roomModel = gtk.TreeStore(gobject.TYPE_PYOBJECT, int, str, str, str, int, int, str)
  126.         self.firstNonChessIter = None
  127.         self.roomIters = { }
  128.         view = self._GtkNetworkGameDialog__gui.get_widget('room_list')
  129.         view.set_model(self.roomModel)
  130.         cell = gtk.CellRendererText()
  131.         column = gtk.TreeViewColumn('', cell)
  132.         column.add_attribute(cell, 'text', 3)
  133.         view.append_column(column)
  134.         cell = gtk.CellRendererPixbuf()
  135.         column = gtk.TreeViewColumn('', cell)
  136.         column.add_attribute(cell, 'icon-name', 7)
  137.         view.append_column(column)
  138.         cell = gtk.CellRendererText()
  139.         column = gtk.TreeViewColumn('', cell)
  140.         column.add_attribute(cell, 'text', 2)
  141.         column.add_attribute(cell, 'weight', 5)
  142.         column.add_attribute(cell, 'style', 6)
  143.         view.append_column(column)
  144.         cell = gtk.CellRendererText()
  145.         column = gtk.TreeViewColumn('', cell)
  146.         column.add_attribute(cell, 'text', 4)
  147.         view.connect('row-activated', self._on_room_changed)
  148.         self.playerModel = gtk.ListStore(gobject.TYPE_PYOBJECT, str, str)
  149.         view = self._GtkNetworkGameDialog__gui.get_widget('player_list')
  150.         view.set_model(self.playerModel)
  151.         cell = gtk.CellRendererPixbuf()
  152.         column = gtk.TreeViewColumn('', cell)
  153.         column.add_attribute(cell, 'icon-name', 2)
  154.         view.append_column(column)
  155.         cell = gtk.CellRendererText()
  156.         column = gtk.TreeViewColumn('', cell)
  157.         column.add_attribute(cell, 'text', 1)
  158.         view.append_column(column)
  159.         self.tableModel = gtk.ListStore(gobject.TYPE_PYOBJECT, str, str, str, gobject.TYPE_PYOBJECT, gobject.TYPE_BOOLEAN)
  160.         self.tableIters = { }
  161.         view = self._GtkNetworkGameDialog__gui.get_widget('table_list')
  162.         view.get_selection().connect('changed', self._on_table_selected)
  163.         view.set_model(self.tableModel)
  164.         cell = gtk.CellRendererText()
  165.         column = gtk.TreeViewColumn(_('Table'), cell)
  166.         column.add_attribute(cell, 'text', 1)
  167.         view.append_column(column)
  168.         cell = gtk.CellRendererText()
  169.         column = gtk.TreeViewColumn(_('Seats'), cell)
  170.         column.add_attribute(cell, 'text', 2)
  171.         view.append_column(column)
  172.         cell = gtk.CellRendererText()
  173.         column = gtk.TreeViewColumn(_('Description'), cell)
  174.         column.add_attribute(cell, 'text', 3)
  175.         view.append_column(column)
  176.         view = self._GtkNetworkGameDialog__gui.get_widget('seat_list')
  177.         cell = gtk.CellRendererText()
  178.         column = gtk.TreeViewColumn(_('Seat'), cell)
  179.         column.add_attribute(cell, 'text', 2)
  180.         view.append_column(column)
  181.         column = gtk.TreeViewColumn(_('Player'), cell)
  182.         column.add_attribute(cell, 'text', 3)
  183.         column.add_attribute(cell, 'style', 4)
  184.         view.append_column(column)
  185.         self._GtkNetworkGameDialog__loadThrobber()
  186.         buffer = self._GtkNetworkGameDialog__gui.get_widget('chat_textview').get_buffer()
  187.         buffer.create_tag('motd', family = 'Monospace', foreground = 'red')
  188.         buffer.create_tag('chat', family = 'Monospace')
  189.         buffer.create_tag('info', family = 'Monospace', foreground = 'gray')
  190.         buffer.create_mark('end', buffer.get_end_iter())
  191.         mainUI.setTooltipStyle(self._GtkNetworkGameDialog__gui.get_widget('info_panel'))
  192.         self._GtkNetworkGameDialog__addProfileDialog = GtkNetworkAddDialog(self, self._GtkNetworkGameDialog__gui.get_widget('network_game_dialog'))
  193.  
  194.     
  195.     def setVisible(self, isVisible):
  196.         '''Called by glchess.ui.NetworkController'''
  197.         widget = self._GtkNetworkGameDialog__gui.get_widget('network_game_dialog')
  198.         if isVisible:
  199.             widget.present()
  200.             if len(self.profileModel) <= self.profileModelSuffixCount + 1:
  201.                 self._GtkNetworkGameDialog__addProfileDialog.setVisible(True)
  202.             
  203.         else:
  204.             self._GtkNetworkGameDialog__addProfileDialog.setVisible(False)
  205.             widget.hide()
  206.  
  207.     
  208.     def setSensitive(self, isSensitive):
  209.         widget = self._GtkNetworkGameDialog__gui.get_widget('controls_box')
  210.         widget.set_sensitive(isSensitive)
  211.  
  212.     
  213.     def setError(self, title, description):
  214.         self._GtkNetworkGameDialog__gui.get_widget('info_panel_title').set_markup('<big><b>%s</b></big>' % title)
  215.         self._GtkNetworkGameDialog__gui.get_widget('info_panel_description').set_markup('<i>%s</i>' % description)
  216.         self._GtkNetworkGameDialog__gui.get_widget('info_panel').show()
  217.  
  218.     
  219.     def clearError(self):
  220.         self._GtkNetworkGameDialog__gui.get_widget('info_panel').hide()
  221.  
  222.     
  223.     def addProfile(self, profile, name, useNow = False):
  224.         '''Called by glchess.ui.UIController'''
  225.         iter = self.profileModel.insert(len(self.profileModel) - self.profileModelSuffixCount)
  226.         self.profileModel.set(iter, 0, profile, 1, self._set_profile, 2, name)
  227.         if self._GtkNetworkGameDialog__profile is None and useNow:
  228.             self._GtkNetworkGameDialog__gui.get_widget('server_combo').set_active_iter(iter)
  229.         
  230.  
  231.     
  232.     def setBusy(self, isBusy):
  233.         '''Called by glchess.ui.UIController'''
  234.         if self._throbberTimer is not None:
  235.             gobject.source_remove(self._throbberTimer)
  236.             self._throbberTimer = None
  237.         
  238.         widget = self._GtkNetworkGameDialog__gui.get_widget('room_button_box')
  239.         widget.set_sensitive(not isBusy)
  240.         if isBusy:
  241.             self._throbberFrame = 1
  242.             self._throbberTimer = gobject.timeout_add(25, self._updateThrobber)
  243.         else:
  244.             self._throbberFrame = 0
  245.         self._updateThrobber()
  246.  
  247.     
  248.     def addRoom(self, index, name, nPlayers, description, room, protocol):
  249.         '''Called by glchess.ui.UIController'''
  250.         
  251.         try:
  252.             (icon, isSupported) = {
  253.                 None: ('stock_people', True),
  254.                 'Chess': ('gnome-glchess', True),
  255.                 'Reversi': ('gnome-iagno', False),
  256.                 'GGZCards': ('gnome-aisleriot', False),
  257.                 'Gnect': ('gnome-gnect', False),
  258.                 'Gnibbles': ('gnome-gnibbles', False),
  259.                 'Freeciv': ('civclient', False) }[protocol]
  260.         except KeyError:
  261.             isSupported = False
  262.             icon = None
  263.  
  264.         if isSupported:
  265.             iter = self.roomModel.insert_before(None, self.firstNonChessIter)
  266.             style = pango.STYLE_NORMAL
  267.         else:
  268.             iter = self.roomModel.append(None)
  269.             if self.firstNonChessIter is None:
  270.                 self.firstNonChessIter = iter
  271.             
  272.             style = pango.STYLE_ITALIC
  273.         self.roomIters[room] = iter
  274.         self.roomModel.set(iter, 0, room, 1, index, 2, name, 3, nPlayers, 4, description, 5, pango.WEIGHT_NORMAL, 6, style, 7, icon)
  275.  
  276.     
  277.     def enterRoom(self, room):
  278.         '''Called by glchess.ui.UIController'''
  279.         for r, iter in self.roomIters.iteritems():
  280.             if r is room:
  281.                 weight = pango.WEIGHT_BOLD
  282.             else:
  283.                 weight = pango.WEIGHT_NORMAL
  284.             self.roomModel.set(iter, 5, weight)
  285.         
  286.  
  287.     
  288.     def updateRoom(self, room, nPlayers):
  289.         
  290.         try:
  291.             iter = self.roomIters[room]
  292.         except KeyError:
  293.             print 'Unknown room!'
  294.             return None
  295.  
  296.         self.roomModel.set(iter, 3, nPlayers)
  297.  
  298.     
  299.     def removeRoom(self, room):
  300.         '''Called by glchess.ui.UIController'''
  301.         iter = self.roomModel.get_iter_first()
  302.         while iter is not None:
  303.             if room is self.roomModel.get_value(iter, 0):
  304.                 self.roomModel.remove(iter)
  305.                 return None
  306.             iter = self.roomModel.iter_next(iter)
  307.             continue
  308.             room is self.roomModel.get_value(iter, 0)
  309.  
  310.     
  311.     def clearRooms(self):
  312.         '''Called by glchess.ui.UIController'''
  313.         self.firstNonChessIter = None
  314.         self.roomIters = { }
  315.         self.roomModel.clear()
  316.  
  317.     
  318.     def updateTable(self, table, name, seats, description, canConnect):
  319.         '''Called by glchess.ui.UIController'''
  320.         
  321.         try:
  322.             iter = self.tableIters[table]
  323.             seatModel = self.tableModel.get_value(iter, 4)
  324.         except KeyError:
  325.             iter = self.tableModel.append()
  326.             self.tableIters[table] = iter
  327.             seatModel = gtk.ListStore(int, str, str, str, int)
  328.  
  329.         self.tableModel.set(iter, 0, table, 1, name, 2, seats, 3, description, 4, seatModel, 5, canConnect)
  330.  
  331.     
  332.     def updateSeat(self, table, number, type, name):
  333.         '''Called by glchess.ui.UIController'''
  334.         iter = self.tableIters[table]
  335.         seatModel = self.tableModel.get_value(iter, 4)
  336.         iter = seatModel.get_iter_first()
  337.         while iter is not None:
  338.             if number == seatModel.get_value(iter, 0):
  339.                 break
  340.             
  341.             iter = seatModel.iter_next(iter)
  342.         if iter is None:
  343.             iter = seatModel.append()
  344.         
  345.         if number == 0:
  346.             seatName = _('White')
  347.         elif number == 1:
  348.             seatName = _('Black')
  349.         else:
  350.             seatName = _('Spectator')
  351.         style = pango.STYLE_ITALIC
  352.         occupant = name
  353.         if type == 'player':
  354.             style = pango.STYLE_NORMAL
  355.         elif type == 'reserved':
  356.             occupant = _('Reserved for %s') % name
  357.         elif type == 'open':
  358.             occupant = _('Seat empty')
  359.         elif type == 'bot':
  360.             occupant = _('AI (%s)') % name
  361.         
  362.         seatModel.set(iter, 0, number, 1, type, 2, seatName, 3, occupant, 4, style)
  363.  
  364.     
  365.     def removeTable(self, table):
  366.         '''Called by glchess.ui.UIController'''
  367.         iter = self.tableIters[table]
  368.         self.tableModel.remove(iter)
  369.  
  370.     
  371.     def joinTable(self, table):
  372.         '''Called by glchess.ui.UIController'''
  373.         gameFrame = self._GtkNetworkGameDialog__gui.get_widget('game_frame')
  374.         roomFrame = self._GtkNetworkGameDialog__gui.get_widget('room_frame')
  375.         if table is None:
  376.             gameFrame.hide()
  377.             roomFrame.show()
  378.         else:
  379.             iter = self.tableIters[table]
  380.             seatModel = self.tableModel.get_value(iter, 4)
  381.             self._GtkNetworkGameDialog__gui.get_widget('seat_list').set_model(seatModel)
  382.             name = self.tableModel.get_value(iter, 3)
  383.             self._GtkNetworkGameDialog__gui.get_widget('game_name_label').set_text(name)
  384.             roomFrame.hide()
  385.             gameFrame.show()
  386.  
  387.     
  388.     def clearTables(self):
  389.         '''Called by glchess.ui.UIController'''
  390.         self.tableIters = { }
  391.         self.tableModel.clear()
  392.  
  393.     
  394.     def addPlayer(self, player, name, icon):
  395.         '''Called by glchess.ui.UIController'''
  396.         iter = self.playerModel.append()
  397.         self.playerModel.set(iter, 0, player, 1, name, 2, icon)
  398.  
  399.     
  400.     def removePlayer(self, player):
  401.         '''Called by glchess.ui.UIController'''
  402.         iter = self.playerModel.get_iter_first()
  403.         while iter is not None:
  404.             if player is self.playerModel.get_value(iter, 0):
  405.                 self.playerModel.remove(iter)
  406.                 return None
  407.             iter = self.playerModel.iter_next(iter)
  408.             continue
  409.             player is self.playerModel.get_value(iter, 0)
  410.  
  411.     
  412.     def clearPlayers(self):
  413.         '''Called by glchess.ui.UIController'''
  414.         self.playerModel.clear()
  415.  
  416.     
  417.     def addText(self, text, style):
  418.         '''Called by glchess.ui.UIController'''
  419.         view = self._GtkNetworkGameDialog__gui.get_widget('chat_textview')
  420.         scroll = self._GtkNetworkGameDialog__gui.get_widget('chat_scroll_window')
  421.         adj = scroll.get_vadjustment()
  422.         atBottom = adj.value >= adj.upper - adj.page_size
  423.         buffer = view.get_buffer()
  424.         mark = buffer.get_mark('end')
  425.         buffer.insert_with_tags_by_name(buffer.get_iter_at_mark(mark), text, style)
  426.         if atBottom:
  427.             view.scroll_mark_onscreen(mark)
  428.         
  429.  
  430.     
  431.     def clearText(self):
  432.         buffer = self._GtkNetworkGameDialog__gui.get_widget('chat_textview').get_buffer()
  433.         buffer.delete(buffer.get_start_iter(), buffer.get_end_iter())
  434.  
  435.     
  436.     def close(self):
  437.         '''Called by glchess.ui.UIController'''
  438.         self._GtkNetworkGameDialog__gui.get_widget('network_game_dialog').hide()
  439.  
  440.     
  441.     def __loadThrobber(self):
  442.         self._throbberTimer = None
  443.         theme = gtk.icon_theme_get_default()
  444.         size = 32
  445.         self._throbberFrames = []
  446.         
  447.         try:
  448.             icon = theme.load_icon('process-idle', size, 0)
  449.         except gobject.GError:
  450.             pass
  451.  
  452.         self._throbberFrames.append(icon)
  453.         
  454.         try:
  455.             icon = theme.load_icon('process-working', size, 0)
  456.         except gobject.GError:
  457.             pass
  458.  
  459.         height = icon.get_height()
  460.         width = icon.get_width()
  461.         size = min(size, height, width)
  462.         for i in xrange(height / size):
  463.             for j in xrange(width / size):
  464.                 frame = icon.subpixbuf(j * size, i * size, size, size)
  465.                 self._throbberFrames.append(frame)
  466.             
  467.         
  468.         self._throbberFrame = 0
  469.         self._updateThrobber()
  470.  
  471.     
  472.     def _updateThrobber(self):
  473.         widget = self._GtkNetworkGameDialog__gui.get_widget('throbber_image')
  474.         
  475.         try:
  476.             icon = self._throbberFrames[self._throbberFrame]
  477.         except IndexError:
  478.             pass
  479.  
  480.         widget.set_from_pixbuf(icon)
  481.         self._throbberFrame += 1
  482.         if self._throbberFrame >= len(self._throbberFrames):
  483.             self._throbberFrame = 1
  484.         
  485.         return True
  486.  
  487.     
  488.     def __setCombo(self, comboName, key):
  489.         widget = self._GtkNetworkGameDialog__gui.get_widget(comboName)
  490.         iter = self._GtkNetworkGameDialog__getIter(widget.get_model(), key)
  491.         if iter is not None:
  492.             widget.set_active_iter(iter)
  493.         
  494.  
  495.     
  496.     def __getIter(self, model, key, default = None):
  497.         '''
  498.         '''
  499.         iter = model.get_iter_first()
  500.         while iter:
  501.             if model.get_value(iter, 0) == key:
  502.                 return iter
  503.             iter = model.iter_next(iter)
  504.             continue
  505.             model.get_value(iter, 0) == key
  506.         return default
  507.  
  508.     
  509.     def __getComboData(self, comboBox, index):
  510.         '''
  511.         '''
  512.         model = comboBox.get_model()
  513.         iter = comboBox.get_active_iter()
  514.         if iter is None:
  515.             return None
  516.         data = model.get(iter, index)
  517.         return data[0]
  518.  
  519.     
  520.     def __startGame(self):
  521.         game = glchess.ui.Game()
  522.         game.name = self._GtkNetworkGameDialog__gui.get_widget('game_name_entry').get_text()
  523.         game.allowSpectators = True
  524.         game.white.type = self._GtkNetworkGameDialog__getComboData(self._GtkNetworkGameDialog__gui.get_widget('white_type_combo'), 0)
  525.         if game.white.type == '':
  526.             game.white.name = _('White')
  527.         else:
  528.             game.white.name = self._GtkNetworkGameDialog__getComboData(self._GtkNetworkGameDialog__gui.get_widget('white_type_combo'), 2)
  529.         game.white.level = self._GtkNetworkGameDialog__getComboData(self._GtkNetworkGameDialog__gui.get_widget('white_difficulty_combo'), 0)
  530.         game.black.type = self._GtkNetworkGameDialog__getComboData(self._GtkNetworkGameDialog__gui.get_widget('black_type_combo'), 0)
  531.         if game.black.type == '':
  532.             game.black.name = _('Black')
  533.         else:
  534.             game.black.name = self._GtkNetworkGameDialog__getComboData(self._GtkNetworkGameDialog__gui.get_widget('black_type_combo'), 2)
  535.         game.black.level = self._GtkNetworkGameDialog__getComboData(self._GtkNetworkGameDialog__gui.get_widget('black_difficulty_combo'), 0)
  536.         game.duration = self._GtkNetworkGameDialog__getComboData(self._GtkNetworkGameDialog__gui.get_widget('time_combo'), 1)
  537.         if game.duration < 0:
  538.             multiplier = self._GtkNetworkGameDialog__getComboData(self._GtkNetworkGameDialog__gui.get_widget('custom_time_units_combo'), 1)
  539.             game.duration = self._GtkNetworkGameDialog__getComboData(self._GtkNetworkGameDialog__gui.get_widget('custom_time_spin'), 1) * multiplier
  540.         
  541.         glchess.config.set('new_game_dialog/white/type', game.white.type)
  542.         glchess.config.set('new_game_dialog/white/difficulty', game.white.level)
  543.         glchess.config.set('new_game_dialog/black/type', game.black.type)
  544.         glchess.config.set('new_game_dialog/black/difficulty', game.black.level)
  545.         self._GtkNetworkGameDialog__mainUI.feedback.onGameStart(game)
  546.  
  547.     
  548.     def _is_profile_model_separator(self, model, iter):
  549.         return model.get(iter, 1)[0] is None
  550.  
  551.     
  552.     def _set_profile(self, profile):
  553.         if profile != self._GtkNetworkGameDialog__profile:
  554.             self._GtkNetworkGameDialog__profile = profile
  555.             self.feedback.setProfile(profile)
  556.         
  557.  
  558.     
  559.     def __selectActiveProfile(self):
  560.         iter = self.profileModel.get_iter_first()
  561.         while iter is not None:
  562.             if self._GtkNetworkGameDialog__profile == self.profileModel.get_value(iter, 0):
  563.                 break
  564.             
  565.             iter = self.profileModel.iter_next(iter)
  566.         self._GtkNetworkGameDialog__gui.get_widget('server_combo').set_active_iter(iter)
  567.  
  568.     
  569.     def _new_profile(self, profile):
  570.         self._GtkNetworkGameDialog__selectActiveProfile()
  571.         self._GtkNetworkGameDialog__addProfileDialog.setVisible(True)
  572.  
  573.     
  574.     def _on_table_selected(self, selection):
  575.         (model, iter) = selection.get_selected()
  576.         if iter is None:
  577.             isSensitive = False
  578.         else:
  579.             isSensitive = model.get_value(iter, 5)
  580.         widget = self._GtkNetworkGameDialog__gui.get_widget('table_join_button')
  581.         widget.set_sensitive(isSensitive)
  582.  
  583.     
  584.     def _on_table_list_activated(self):
  585.         pass
  586.  
  587.     
  588.     def _on_server_combo_changed(self, widget):
  589.         '''Gtk+ callback'''
  590.         model = widget.get_model()
  591.         iter = widget.get_active_iter()
  592.         (method,) = model.get(iter, 1)
  593.         (profile,) = model.get(iter, 0)
  594.         method(profile)
  595.  
  596.     
  597.     def _on_chat_entry_activate(self, widget):
  598.         '''Gtk+ callback'''
  599.         text = widget.get_text()
  600.         widget.set_text('')
  601.         self.feedback.sendChat(text)
  602.  
  603.     
  604.     def _on_delete(self, widget, event):
  605.         return True
  606.  
  607.     
  608.     def _on_response(self, widget, response_id):
  609.         '''Gtk+ callback'''
  610.         self._GtkNetworkGameDialog__gui.get_widget('network_game_dialog').hide()
  611.  
  612.     
  613.     def _on_room_changed(self, widget, path, column):
  614.         '''Gtk+ callback'''
  615.         model = self._GtkNetworkGameDialog__gui.get_widget('room_list').get_model()
  616.         iter = model.get_iter(path)
  617.         if iter is None:
  618.             return True
  619.         room = model.get_value(iter, 0)
  620.         if room is not None:
  621.             self.feedback.enterRoom(room)
  622.         
  623.         return True
  624.  
  625.     
  626.     def _on_table_join_button_clicked(self, widget):
  627.         '''Gtk+ callback'''
  628.         (model, iter) = self._GtkNetworkGameDialog__gui.get_widget('table_list').get_selection().get_selected()
  629.         if iter is None:
  630.             return None
  631.         table = model.get_value(iter, 0)
  632.         self.feedback.joinTable(table)
  633.  
  634.     
  635.     def _on_table_leave_button_clicked(self, widget):
  636.         '''Gtk+ callback'''
  637.         self.feedback.leaveTable()
  638.  
  639.     
  640.     def _on_table_new_button_clicked(self, widget):
  641.         '''Gtk+ callback'''
  642.         self.feedback.startTable()
  643.  
  644.  
  645.